package org.zengrong.utils {
	import flash.utils.ByteArray;
	import flash.utils.getQualifiedClassName;
	import flash.utils.getQualifiedSuperclassName;

	/**
	 * 对象常用工具类
	 * 1.深度复制一个对象
	 * 2.数组的转换
	 * 3.对象的转换
	 * 4.删除末尾的定界符
	 * 5.判断一个对象是数组或Vector
	 */	
	public class ObjectUtil {
		/**
		 * 复制一个普通对象
		 * @param value
		 */	
		public static function clone(value:Object):Object {
			var _bytes:ByteArray = new ByteArray();
			_bytes.writeObject(value);
			_bytes.position = 0;
			return _bytes.readObject();
		}
		
		/**
		 * 将Array或者Vector转换为字符串，仅支持一层。
		 * @param $arrOrVector Array或者Vector
		 */	
		public static function array2String($arrOrVector:*, $delim:String=','):String {
			if(!isArray($arrOrVector)) {
				if(!$arrOrVector)
					return 'null';
				return $arrOrVector.toString();			
			}
			var _length:int =$arrOrVector.length;
			var _str:String = ($arrOrVector is Vector.<*>) ? 'Vector[' : 'Array[';
			
			for(var i:int=0; i<_length;i++) {
				_str += $arrOrVector[i].toString() + $delim;
			}
			return delEndDelimiter(_str, $delim) + ']';
		}
		
		/**
		 * 将仅包含Object的数组转换成文本
		 * @param $arr Array或者Vector
		 */
		public static function arrayObj2String($arrOrVector:*):String {
			if(!isArray($arrOrVector)) return null;
			var __str:String = '[';
			for(var i:int=0;i<$arrOrVector.length;i++) {
				__str += obj2String($arrOrVector[i]) + ','; //去除最后的符号
			}
			return delEndDelimiter(__str, ',') + ']';
		}
		
		/**
		 * 将标准的Object转换成字符串，仅支持一层。
		 * {name:yu} 去除字符串的符号
		 */	
		public static function obj2String($obj:Object, $delim1:String=':',
										  $delim2:String=','):String {
			if($obj === null) return 'null';
			
			var _str:String = '{';
			var _value:*;
			for(var __key:String in $obj) {
				_value = $obj[__key];
				if(_value) _value = _value.toString();
				_str += __key + $delim1 + _value + $delim2;
			}
			return delEndDelimiter(_str, $delim2) + '}';
		}
		
		/**
		 * 删除末尾的定界符
		 * 如：[a,b,c,]
		 */	
		public static function delEndDelimiter($str:String, $del:String=','):String {
			//如果能搜索到定界符是最后一位
			if($str.lastIndexOf($del) == $str.length-$del.length) {
				return $str.slice(0, $str.length - $del.length);
			}
			return $str;
		}
		
		/**
		 * 判断一个对象是否是Array或者Vector
		 */
		public static function isArray($obj:*):Boolean {
			return $obj is Array || $obj is Vector.<*>;
		}
		
		/**
		 * 判断一个对象是否是简单对象
		 */
		public static function isSimple($obj:*):Boolean {
			return $obj is String ||
					$obj is Boolean ||
					$obj is int ||
					$obj is Number ||
					$obj is uint;
		}
	}
}
